1. Field of the Invention
Embodiments of the present invention relate generally to semiconductor memory devices. More particularly, embodiments of the invention relate to non-volatile memory devices and associated programming methods.
A claim of priority is made to Korean Patent Application No. 2005-68039 filed on Jul. 26, 2005, the disclosure of which is hereby incorporated by reference in its entirety.
2. Description of Related Art
The demand for high performance non-volatile memory devices has increased dramatically in recent years. This increased demand is due at least in part to the proliferation of increasingly sophisticated portable electronic devices requiring high capacity, high speed memories capable of storing data even when power is cut off from the devices.
Flash memory is one of the most popular forms of non-volatile memory in use today. Flash memory is a popular choice for portable electronic devices for many reasons such as its non-volatile properties, its high capacity, high speed, low power consumption, shock resistance, ease of implementation, and low cost per bit. Common examples of portable devices that include flash memory are cellular phones, cameras, portable music players, memory sticks, and so on. Flash memory is also used in a variety of non-portable devices such as the BIOS of most personal computers.
Most flash memory falls roughly into one of two major categories: NAND flash memory and NOR flash memory. NAND flash memory is typically employed for long term data storage because of its relatively high density compared with NOR flash memory, while NOR flash memory is often used for storing data requiring quick access such as program code, due to its relatively high read speed compared to NAND flash memory.
Exemplary flash memory devices are disclosed in a variety of patent documents. For instance, U.S. Pat. Nos. 5,677,873 and 5,991,202 both disclose flash memory devices and associated programming methods.
FIG. 1 is a flowchart illustrating a conventional method of programming a non-volatile memory device. The method is described below. In the description that follows, exemplary method steps are denoted by parentheses (XXX).
Referring to FIG. 1, program data is loaded into a first register of the non-volatile memory device (S10). Next, the program data loaded in the first register is programmed into a selected memory cell of the non-volatile memory device (S20). Thereafter, a verify read operation is performed to determine whether the selected memory cell has attained a desired threshold voltage or not (S30), and a result of the verify read operation is temporarily stored in a second register. The data stored in the second register is then selected and loaded into an internal data bus (S40). This operation is referred to as a column scan operation, or a Y-scan operation.
After the column scan operation, the data loaded in the internal data bus is inspected to determine whether it has a program pass value (S50). A program pass value is a data value that indicates that the selected memory cell has been adequately programmed. The opposite of the program pass value is a program fail value, which indicates that the selected memory cell has not been adequately programmed. If the data loaded in the internal data bus has the program pass value (S80), then the programming of the memory cell is complete and the method terminates. Otherwise, the method determines whether a number of program loops performed on the selected memory cell has reached a predefined maximum number of loops allowed (S60). If the number of program loops performed on the selected memory cell reaches the maximum number allowed, then the programming of the selected memory cell has failed (S70) and the method terminates. Otherwise, steps S20 through S60 are repeated until either the maximum number of loops is reached, or the selected memory cell is properly programmed.
If the maximum number of program loops is reached and the selected memory cell is not programmed, then a block of the non-volatile memory device where the selected memory cell resides is classified as a bad block. In other words, if a bit fails to be adequately programmed after the maximum number of program loops, the block containing the bit is considered a bad block. A bit that fails to be adequately programmed after a programming operation is performed will be referred to hereafter as a “failed bit.”
Memory blocks are classified as “bad blocks” regardless of the total number of failed bits contained therein. However, classifying a whole block as a bad block based on a single failed bit can be wasteful because often the presence of a small number of failed bits can be remedied by including an error correction circuit in the memory device. When a read operation is performed, the error correction circuit can ensure that a block which would otherwise be classified as a “bad block” will output the correct data values.